]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
workspacesView: Don't invalidate allocation before using it for gesture
authorSebastian Keller <skeller@gnome.org>
Tue, 16 Feb 2021 02:50:52 +0000 (03:50 +0100)
committerSebastian Keller <skeller@gnome.org>
Tue, 16 Feb 2021 02:50:52 +0000 (03:50 +0100)
Calling startTouchGesture() on the workspacesViews can change the
visibility of the workspaces if not all of them are already shown, such
as when there are more than 3 workspaces or for 3 workspaces if we are
not on the central one. This invalidates the allocation and the width
used as distance for the gesture would become 0, resulting in drag
gestures immediately jumping to the first or last workspace due to a
division by 0.

Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/3721

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1682>

js/ui/workspacesView.js

index 0cfe91561bf927b68cc3a2177961facf438576eb..177fd413d99c00412b7f4c94f8cbb9e0298a7676 100644 (file)
@@ -716,12 +716,12 @@ class WorkspacesDisplay extends St.Widget {
             ? Clutter.Orientation.HORIZONTAL
             : Clutter.Orientation.VERTICAL;
 
+        const distance = global.workspace_manager.layout_rows === -1
+            ? this.height : this.width;
+
         for (let i = 0; i < this._workspacesViews.length; i++)
             this._workspacesViews[i].startTouchGesture();
 
-        let distance = global.workspace_manager.layout_rows === -1
-            ? this.height : this.width;
-
         let progress = adjustment.value / adjustment.page_size;
         let points = Array.from(
             { length: workspaceManager.n_workspaces }, (v, i) => i);